//
//  TwoViewController.m
//  GCD
//
//  Created by fangyuan ding on 2019/12/19.
//  Copyright © 2019年 fangyuan ding. All rights reserved.
//

#import "TwoViewController.h"

@interface TwoViewController ()

@end

@implementation TwoViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //串行对列的同步执行
//    [self demo1];
    //串行队列的异步执行
//    [self demo2];
    //并行队列的同步执行
//    [self demo3];
    ////并行队列的异步执行
//    [self demo4];
    //主队列 同步执行
//    [self demo5];
    //主队列 异步执行
//    [self demo6];
      [self demo7];
   
}

//串行对列的同步执行 不开启线程 任务是按顺序进行

- (void)demo1{
    dispatch_queue_t queue = dispatch_queue_create("hm", DISPATCH_QUEUE_SERIAL);
    for(int  i = 0; i < 10 ; i ++){
        dispatch_sync(queue, ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
   
}

//串行队列的异步执行  开启新线程 任务有序执行
- (void)demo2{
     dispatch_queue_t queue = dispatch_queue_create("hm", DISPATCH_QUEUE_SERIAL);
    for(int  i = 0; i < 10 ; i ++){
        dispatch_async(queue, ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
}

//并行队列的同步执行  ===    串行对列的同步执行 不开启线程 任务是按顺序进行
- (void)demo3{
    dispatch_queue_t queue = dispatch_queue_create("hm", DISPATCH_QUEUE_CONCURRENT);
    for(int  i = 0; i < 10 ; i ++){
        dispatch_sync(queue, ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
}
//并行队列的异步执行 开多个线程  无序执行
- (void)demo4{
    dispatch_queue_t queue = dispatch_queue_create("hm", DISPATCH_QUEUE_CONCURRENT);
    for(int  i = 0; i < 10 ; i ++){
        dispatch_async(queue, ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
}
//主队列 同步执行  死锁
//同步执行：会等着第一个任务执行完成，才会继续向后执行
- (void)demo5{
    for(int i = 0 ; i < 10 ; i++){
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
}

//主队列 异步执行  主线程 顺序执行
//主队列的特点：先执行完主线程上的代码，才会执行主队列中的任务
- (void)demo6{
    for(int i = 0 ; i < 10 ; i++){
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
    
}
//全局队列
- (void)demo7{
   
    //iOS7以后推荐使用服务质量
    for(int i = 0 ; i < 10 ; i++){
        dispatch_async( dispatch_get_global_queue(0, 0), ^{
            NSLog(@"hello %d %@",i,[NSThread currentThread]);
        });
    }
    
}

@end
